home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / systems / atari / birkhahn-metafont-packed-disks / mf27-2_2e-disk2.zoo / doc.lzh / NEW_MF.DOC < prev    next >
Internet Message Format  |  1991-07-20  |  18KB

  1. From: TeXMaG Volume 4 No. 1
  2.  
  3. **********************************************************************
  4. *            The new versions of TeX and Metafont:                   *
  5. *                      Draft description                             *
  6. **********************************************************************
  7. by Donald E. Knuth
  8.  
  9. [Editor's note: Since I've been so slow getting things out, this
  10. description may be dated somewhat. However, to the best of my
  11. knowledge, if there are any changes to TeX not described here, they
  12. are not substantial.]
  13.  
  14. For more than five years I held firm to my conviction that a stable
  15. system was far better than a system that continues to evolve. But
  16. during the TUG meeting at Stanford in August, 1989, I was persuaded to
  17. make one last set of changes, in order to bring TeX and Metafont to a
  18. state of completion consistent with their overall philosophy and
  19. goals.
  20.  
  21. The main reason for the changes was the fact that I had guessed wrong
  22. about 7-bit character sets versus 8-bit character sets. I believed
  23. that standard text input would continue indefinitely to be confined to
  24. at most 128 characters, since I did not think a keyboard with 256
  25. different outputs would be especially efficient. Needless to say, I
  26. was proved wrong, especially by developments in Europe and Asia. As
  27. soon as I realized that a text formatting program with 7-bit input
  28. would rapidly begin to seem as archaic as the 6-bit systems we once
  29. had, I knew that a fundamental revision was necessary.
  30.  
  31. But the 7-bit assumption pervaded everything, so I needed to take the
  32. programs apart and redo them thoroughly in 8-bit style. This put TeX
  33. onto the operating table and under the knife for the first time since
  34. 1984, and I had a final opportunity to include a few new features that
  35. had occurred to me or been suggested by users since then.
  36.  
  37. The new extensions are entirely upward compatible with previous
  38. versions of TeX and Metafont (with a few small exceptions mentioned
  39. below). This means that error-free inputs to the old TeX and Metafont
  40. will still be error-free inputs to the new systems, and they will
  41. still produce the same outputs.
  42.  
  43. However, anybody who dares to use the new extensions will be unable to
  44. get the desired results from old versions of TeX and Metafont. I am
  45. therefore asking the TeX community to update all copies of the old
  46. versions as soon as possible. Let us root out and destroy the obsolete
  47. 7-bit systems, even though we were able to do many fine things with
  48. them.
  49.  
  50. In this note I'll discuss the changes, one by one; then I'll describe
  51. the exceptions to upward compatibility.
  52.  
  53. 1. The character set.
  54.  
  55.    Up to 256 distinct characters are now allowed in input files. The
  56.    codes that were formerly limited to the range 0...127 are now in
  57.    the range 0...255. All characters are alike; you are free to use
  58.    any character for any purpose in TeX, assigning appropriate values
  59.    to its \catcode, \mathcode, \lccode, \uccode, \sfcode, and
  60.    \delcode. Plain TeX initializes these code values for characters
  61.    above 127 just as it initializes the codes for ordinary punctuation
  62.    characters like "!".
  63.  
  64.    There's a new convention for inputting an arbitrary 8-bit character
  65.    to TeX when you can't necessarily type it: The four consecutive
  66.    characters  ^^xy, where x and y are any of the "lowercase
  67.    hexadecimal digits"  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e,
  68.    or f, are treated by TeX on input as if they were a single
  69.    character with specified code digits. For example,  ^^80 gives
  70.    character code 128; the entire character set is available from ^^00
  71.    to ^^ff. The old convention discussed in Appendix C, under which
  72.    character 0 was ^^@, character 1 (control--A) was ^^A, ..., and
  73.    character 127 was ^^?, still works for the first 128 character
  74.    codes, except that the character following ^^ should not be a
  75.    lowercase hexadecimal digit when the immediately following
  76.    character is another such digit.
  77.  
  78.    The existence of 8-bit characters has less effect in Metafont than
  79.    in TeX, because Metafont's character classes are built in to each
  80.    installation. The normal set of 95 printing characters described on
  81.    page 51 of  Metafontbook can be supplemented by extended characters
  82.    as discussed on page 282, but this is rarely done because it leads
  83.    to problems of portability. Metafont's  char operator is now
  84.    redefined to operate modulo 256 instead  of modulo 128.
  85.  
  86. 2. Hyphenation tables.
  87.    Up to 256 distinct sets of rules for hyphenation are now allowed in
  88.    TeX. There's a new integer parameter called \language, whose
  89.    current value specifies the hyphenation convention in force. If
  90.    \language is negative or greater than 255, TeX acts as if
  91.    \language=0.
  92.  
  93.    When you list hyphenation exceptions with TeX's  \hyphenation
  94.    primitive, those exceptions apply to the current language only.
  95.    Similarly, the \patterns primitive tells TeX to remember new
  96.    hyphenation patterns for the current language; this operation is
  97.    allowed only in the special "initialization" program called
  98.    INITEX. Hyphenation exceptions can be added at any time, but new
  99.    patterns cannot be added after a paragraph has been typeset.
  100.  
  101.    When TeX reads the text of a paragraph, it automatically inserts
  102.    "whatsit nodes" into the horizontal list for that paragraph
  103.    whenever a character comes from a different \language than its
  104.    predecessor. In that way TeX can tell what hyphenation rules to use
  105.    on each word of the paragraph even if you switch  frequently back
  106.    and forth among many different languages.
  107.  
  108.    The special whatsit nodes are inserted automatically in
  109.    unrestricted horizontal mode (i.e., when you are creating a
  110.    paragraph, but not when you are specifying the contents of an
  111.    hbox). You can insert a special whatsit yourself in restricted
  112.    horizontal mode by saying \language<number>. This is needed only if
  113.    you are doing something tricky, like unboxing some contribution to
  114.    a paragraph.
  115.  
  116. 3. Hyphenated fragment control.
  117.    TeX has new parameters  \lefthyphenmin and \righthyphenmin, which
  118.    specify the smallest word fragments that will appear at the
  119.    beginning or end of a word that has been hyphenated. Previously the
  120.    values \lefthyphenmin=2 and \righthyphenmin=3 were hard-wired into
  121.    TeX and impossible to change. Now plain TeX  format supplies the
  122.    old values, which are still recommended for most American
  123.    publications; but you can get more hyphens by decreasing these
  124.    parameters, and you can get fewer hyphens by increasing them. If
  125.    the sum of \lefthyphenmin and \righthyphenmin is 63 or more, all
  126.    hyphenation is suppressed. (You can also suppress  hyphenation by
  127.    using a font with \hyphenchar=-1, or by switching to a  \language
  128.    that has no hyphenation patterns or exceptions.)
  129.  
  130. 4. Smarter ligatures.
  131.    Now here's the most radical change. Previous versions of TeX had
  132.    only one kind of ligature, in which two characters like "f" and "i"
  133.    were changed into a single character like "fi" when they appeared
  134.    consecutively. The new TeX understands much more complex
  135.    constructions by which, for example, we could change an "i"
  136.    following "f" to a dotless "\i" while the "f" remains unchanged:
  137.    "f\i".
  138.  
  139.    As before, you get ligatures only if they have been provided in the
  140.    font you are using. So let's look at the new features of Metafont
  141.    by which enhanced ligatures can be created. A Metafont programmer
  142.    can specify a "ligature/kerning program" for any character of the
  143.    font being created. If, for example, the "fi" combination appears
  144.    in font position 12, the replacement of "f" and "\i" by "fi" is
  145.    specified by including the statement "i" =: 12 in the
  146.    ligature/kerning program for "f"; this is Metafont's present
  147.    convention.
  148.  
  149.    The new ligatures allow you to retain one or both of the original
  150.    characters while inserting a new one. Instead of =: you can also
  151.    write |=: if you wish to retain the left character, or =:| if you
  152.    wish to retain the right character, or |=:| if you want to keep
  153.    them both. For example, if the dotless \i appears in font position
  154.    16, you can get the behavior mentioned above by having "i" |=: 16
  155.    in f's program.
  156.  
  157.    There also are four additional operators |=:>,  =:|>,  |=:|>,
  158.    |=:|>>, where each > tells TeX to shift its focus one position to
  159.    the right. For example, if f and i had been replaced by f and
  160.    dotless \i as above, TeX would begin again to execute f's
  161.    ligature/kern program, possibly inserting a kern before the dotless
  162.    \i, or possibly changing the f to an entirely different character,
  163.    etc. But if the instruction had been "i" |=:> 16 instead, TeX would
  164.    turn immediately to the ligature/kern program for characters
  165.    following character 16 (the dotless \i); no further change would be
  166.    made between f and \i even if the font had something specified
  167.    there.
  168.  
  169. 5. Boundary ligatures.
  170.    Every consecutive string of "characters" read by TeX in horizontal
  171.    mode (after macro expansion) can be called a "word". (Technically
  172.    we consider a "character" in this definition to be either a
  173.    character whose \catcode is a letter or otherchar, or a control
  174.    sequence that has been \let equal to such a character, or a control
  175.    sequence that has been defined by \chardef, or the construction
  176.    \char<number>.) The new TeX now imagines that there is an invisible
  177.    "left boundary character" just before every such word, and an
  178.    invisible "right boundary character" just after it. These boundary
  179.    characters take effect if the font designer has specified ligatures
  180.    and/or kerning between them and the adjacent letters. Thus, the
  181.    first or last character of a word can  now be made to change its
  182.    shape automatically.
  183.  
  184.    A ligature/kern program for the left boundary character is
  185.    specified within Metafont by using the special label  ||: in a
  186.    ligtable command. A ligature or kern with the right boundary
  187.    character is specified by assigning a value to the new internal
  188.    Metafont parameter  boundarychar, and by specifying a ligature or
  189.    kern with respect to this character. The boundarychar may or may
  190.    not exist as a real character in the font.
  191.  
  192.    For example, suppose we want to change the first letter of a word
  193.    from "F" to "ff" if we are doing some olde English. The Metafont
  194.    font designer could then say ligtable ||: "F" |:= 11 if character
  195.    11 is the "ff". The same ligtable instruction should appear in the
  196.    programs for characters like ( and ` and " and - that can precede
  197.    strings of letters; then "Bassington-French" will yield
  198.    "Bassington-ffrench".
  199.  
  200.    If the "s" of our font is the pre-19th century s that looks like a
  201.    mutilated "f", and if we have a modern "s" in position 128, we can
  202.    convert the final s's as Ben Franklin did by introducing ligature
  203.    instructions such as
  204.  
  205.             boundarychar := 255;
  206.             ligtable "s":   255 =:| 128,
  207.                             "." =:| 128,
  208.                             "," =:| 128,
  209.                             ")" =:| 128,
  210.                             "'" =:| 128,
  211.    and so on. (A true oldstyle font would also have ligatures for ss
  212.    and si and sl and ssi and ssl and st; it would be fun to create a
  213.    Computer Modern Oldstyle.)
  214.  
  215.    The implicit left boundary character is omitted by TeX if you say
  216.    \noboundary just before the word; the implicit right boundary is
  217.    omitted if you say \noboundary just after it.
  218.  
  219. 6. More compact ligatures.
  220.    Two or more ligtables can now share common code. To do this in
  221.    Metafont, you say "skipto <n>" at the end of one ligtable command,
  222.    then you say "<n>::" within another. Such local labels can be
  223.    reused; e.g., you can say skipto 1 again after 1:: has appeared,
  224.    and this skips to the _next_ appearance of 1::. There are 256 local
  225.    labels, numbered 0 to 255. Restriction: At most 128 ligature or
  226.    kern commands can intervene between a skipto and its matching
  227.    label.
  228.  
  229.    The TFM file format has been upwardly extended to allow more than
  230.    32,500 ligature/kern commands per font. (Previously there was an
  231.    effective limit of 256.)
  232.  
  233. 7. Better looking sloppiness.
  234.    There is now a better way to avoid overfull boxes, for people who
  235.    don't want to look at their documents to fix unfeasible line breaks
  236.    manually. Previously people tried to do this by setting
  237.    \tolerance=10000, but the result was terrible because TeX would
  238.    tend to consolidate all the badness in one truly horrible line.
  239.    (TeX considers all badness >=10000 to be infinitely bad, and all
  240.    these infinities are equal.)
  241.  
  242.    The new feature is a dimension parameter called \emergencystretch.
  243.    If \emergencystretch is positive and if TeX has been unable to
  244.    typeset a paragraph without exceeding the given tolerances, another
  245.    pass over the paragraph is made in which TeX pretends that
  246.    additional stretchability equal to \emergencystretch is present in
  247.    every line. The effect of this is to scale down all the badnesses
  248.    into a range where previously infinite cases become finite;  TeX
  249.    will find an optimum solution to the scaled-down problem, and this
  250.    will be about as good as possible in a practical sense. (The extra
  251.    stretching is not really present; therefore underfull boxes will be
  252.    reported in warning messges unless \hbadness is increased.)
  253.  
  254. 8. Looking at badness.
  255.    TeX has a new internal integer parameter called \badness that
  256.    records the badness of the box it has most recently constructed. If
  257.    that box was overfull, \badness will be 1000000; otherwise \badness
  258.    will be between 0 and 10000.
  259.  
  260. 9. Looking at the line number.
  261.    TeX also has a new internal integer parameter called \inputlineno,
  262.    which contains the number of the line that TeX would show on an
  263.    error message if an error occurred now. (This parameter and
  264.    \badness are "read only" in the same way as \lastpenalty: You can
  265.    use them in the context of a <number>, e.g., by saying
  266.    "\ifnum\inputlineno>\badness ...\ \fi" or "\the\inputlineno", but
  267.    you cannot set them to new values.)
  268.  
  269. 10. Not looking at error context.
  270.    There's a new integer parameter called \errorcontextlines that
  271.    specifies the maximum number of two-line pairs of context displayed
  272.    with TeX's error messages (in addition to the top and bottom lines,
  273.    which always appear). Plain TeX now sets \errorcontextlines=5, but
  274.    higher level format packages might prefer \errorcontextlines=1  or
  275.    even \errorcontextlines=0. In the latter case, an error that
  276.    previously involved three or more pairs of context would now appear
  277.    as follows:
  278.             ! Error.
  279.             <somewhere> The \top
  280.                         The \top\ line
  281.             ...
  282.             1.123 \The
  283.                   \The\ bottom line.
  284.    (If \errorcontextlines<0 you wouldn't even see the `...' here.)
  285.  
  286. 11. Output recycling.
  287.    One more new integer parameter completes the set. If
  288.    \holdinginserts>0 when TeX is putting the current page into \box255
  289.    for the  \output routine, TeX will not move anything from insertion
  290.    nodes into the corresponding boxes; all insertion nodes will stay
  291.    in place. Designers of output routines can use this when they want
  292.    to put the contents of box 255 back into the current page to be
  293.    re-broken (because they might want to change \vsize or something).
  294.  
  295. 12. Exceptions to upward compatibility.
  296.    The new features of TeX and Metafont imply that a few things work
  297.    differently than before. I will try to list all such cases here
  298.    (except when the  previous behavior was erroneous due to a bug in
  299.    TeX or Metafont). I don't know of any cases where users will
  300.    actually be affected, because all of these exceptions are pretty
  301.    esoteric.
  302.  
  303.    o TeX used to convert the character strings ^^0, ^^1,..., ^^9, ^^a,
  304.      ^^b, ^^c, ^^d, ^^e, ^^f into the respective single characters p,
  305.      q,..., y, !, ", #, $, %, &. It will no longer do this if the
  306.      following character is one of the characters 0123456789abcdef.
  307.  
  308.    o TeX used to insert no character at the end of an input line if
  309.      \endlinechar>127. It will now insert a character unless
  310.      \endlinechar>255. (As previously, \endlinechar<0 suppresses the
  311.      end-of-line character. This character is normally 13=ASCII
  312.      control--M = carriage return.)
  313.  
  314.    o Some diagnostic messages from TeX used to have the notation
  315.      ["80]...["FF] when referring to characters 128...255 (for example
  316.      when displaying the contents of an overfull box involving fonts
  317.      that include such characters). The notation ^^80...^^ff is now
  318.      used instead.
  319.  
  320.    o The expressions char128 and char0 used to be equivalent in
  321.      Metafont; now char is defined modulo 256 instead. Hence char-1 =
  322.      char255, etc.
  323.  
  324.    o INITEX used to forget all previous hyphenation patterns each time
  325.      you specified \patterns. Now all hyphenation pattern specifications
  326.      are cummulative, and you are not permitted to use \patterns after a
  327.      paragraph has been hyphenated by INITEX.
  328.  
  329.    o TeX used to act a bit differently when you tried to typeset
  330.      missing characters of a font. A missing character is now considered
  331.      to be a word boundary, so you will get slightly more diagnostic
  332.      output when \tracingcommands>0.
  333.  
  334.    o TeX and Metafont will report different statistics at the end of a
  335.      run because they now have a different number of primitives.
  336.  
  337.    o Programs that use the string pool feature of TANGLE will no
  338.      longer run without changes, because the new TANGLE starts numbering
  339.      multicharacter strings at 256 instead of 128.
  340.  
  341.    o INITEX programs must now set \lefthyphenmin=2 and
  342.      \righthyphenmin=3 in order to reproduce their previous behavior.
  343.  
  344.